class Vue{
    
    constructor(options){
        //通过属性保存选项的数据
        this.$options=options || {};
        this.$data=options.data || {}
        this.$el=typeof options.el ==="string" ? document.querySelector(options.el) :options.el 
        //把da'ta中成员转换成getter 和setter 注入到vue实例当中
        this._prxyData(this.$data)
        //调用observe对象监听数据变化
        new observer(this.$data)
        //调用compile对象解析指令和差值表达式
        new Compiler(this)
    }
  
    _prxyData(data){
        console.log(data)
        Object.keys(data).forEach(key => {
            Object.defineProperty(this, key,{
                enumerable:true,
                configable:true,
                get(){
                    return data[key]
                },
                set(newVal){
                    if(newVal==data[key]){
                        return
                    }
                    data[key]=newVal
                }
            })
        });
    }


}